package com.zhang;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.ConstVal;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.fill.Column;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * @program: springboot-mybatis-plus
 * @description: 代码生成器
 * @author: Mr.Zhang
 * @create: 2022-02-15 16:06
 **/
public class NewGenerator {

    /**
     * 功能描述: <br>
     * 〈项目路径〉
     *
     * @Author: Mr.zhang
     * @Date: 2022/2/15 20:34
     */
    private static String path = "E:\\Homework\\新冠物资管理系统\\Xinguan-zhang\\xinguan-parent\\xinguan-base-api";
    /**
     * 功能描述: <br>
     * 〈数据库连接字符串〉
     *
     * @Author: Mr.zhang
     * @Date: 2022/2/15 20:39
     */
    private static String url = "jdbc:mysql://localhost:3306/xinguan?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
    /**
     * 功能描述: <br>
     * 〈username〉
     *
     * @Author: Mr.zhang
     * @Date: 2022/2/15 20:40
     */
    private static String username = "root";
    /**
     * 功能描述: <br>
     * 〈password〉
     *
     * @Author: Mr.zhang
     * @Date: 2022/2/15 20:40
     */
    private static String password = "root";


    public static void main(String[] args) {

        FastAutoGenerator.create(url, username, password)
                // 全局配置
                .globalConfig(builder -> {
                    builder.author("Zhang") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir(path + "/src/main/java"); // 指定输出目录
                })
                // 包配置
                .packageConfig(builder -> {
                    builder.parent("com.zhang") // 设置父包名
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, path+"/src/main/resources/mapper")); // 设置mapperXml生成路径
                })// 策略配置
                .strategyConfig((scanner, builder) -> builder
                        .addInclude(getTables(scanner.apply("请输入表名，多个英文逗号分隔？所有输入 all")))    //选择生成的表
                        .addTablePrefix("t_", "c_","biz","tb_")    // 设置过滤表前缀
                        /*enityt层配置*/
                        .entityBuilder()
                        //.versionPropertyName()  //设置乐观锁实体属性字段名称
                        //.versionColumnName()    //设置乐观锁数据库字段名称
                        .enableLombok()         //开启lombok模型，默认不开启
                        //.enableRemoveIsPrefix()     //开启Boolean类型字段移除is前缀
                        .addTableFills(     //添加表字段填充
                                new Column("create_time", FieldFill.INSERT),
                                new Column("modified_time", FieldFill.INSERT_UPDATE)
                        )
                        //service层配置
                        .serviceBuilder()
                        .convertServiceFileName((entityName -> entityName + ConstVal.SERVICE)) //设置service接口 去掉I
                        //controller层配置
                        .controllerBuilder()
                        .enableRestStyle()      //开启生成@RestController控制器
                        .enableHyphenStyle()    //开启驼峰转连字符
                        .build())
                        /*模板引擎配置，默认 Velocity 可选模板引擎 Beetl 或 Freemarker*/
                        //.templateEngine(new BeetlTemplateEngine())
                        //.templateEngine(new FreemarkerTemplateEngine())

                .execute();

    }


    // 处理 all 情况
    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }

}
